﻿/*******************************************************************
Copyright (c) 2011 이재범

*  Permission is hereby granted, free of charge, to any person
*  obtaining a copy of this software and associated documentation
*  files (the "Software"), to deal in the Software without
*  restriction, including without limitation the rights to use,
*  copy, modify, merge, publish, distribute, sublicense, and/or sell
*  copies of the Software, and to permit persons to whom the
*  Software is furnished to do so, subject to the following
*  conditions:
* 
*  The above copyright notice and this permission notice shall be
*  included in all copies or substantial portions of the Software.
* 
*  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
*  OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
*  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
*  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
*  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
*  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
*  OTHER DEALINGS IN THE SOFTWARE.
*******************************************************************/

#include "hash.h"
#include "dictionary.h"

#pragma once

vector<int> compute_bmp_last(const string &pattern);
vector<int> bmp_search(const string &text, const string &pattern);

// 사용자가 입력한 검색어를 찾는 클래스이다.
class Search
{
private:
	string query; // 입력한 검색어
	static int total_num_data;

	string entire_hash;
	vector<string> hash_operand;
	vector<string> hash_operator;
	vector<string> hash_det;
	int num_result;

public:
	static void load_database(); // 초기 데이터베이스를 생성한다. 
	static vector<Dictionary<string>*> database; // 전체 데이터베이스
	static vector<Dictionary<string>*> equation_db; // 원래 수식;
	static vector<Dictionary<string>*> equation_normal_db; // 정규화된 수식 db

	Search(string& _query);
	Search() {}
	vector<string> search_result;  // 검색 결과 모음

	void partial_search(string& _query);
};
